package com.lanchetech.user.service;


import com.lanchetech.bean.request.*;
import com.lanchetech.bean.response.*;
import com.lanchetech.bean.vo.*;
import com.lanchetech.entity.*;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

public interface MerchantService {

    ResultData<BasePageResp<AfterSaleResp>> getAfterSalePage(AfterSalePageReq req);

    BaseResp editAfterSaleLogistics(AfterSale req);

    BaseResp rejectAfterSale(AfterSale req);

    BaseResp confirmAfterSale(AfterSale req);

    ResultData<AfterSaleDetailResp> getAfterSaleDetail(Long id);

    BaseResp editOrderLogistics(Orders orders);

    ResultData<BasePageResp<TenantWithdraw>> getTenantWithdrawPage(PageReq req);

    BaseResp createTenantWithdraw(TenantWithdraw req);

    ResultData<TenantFundVO> getTenantFundInfo();

    ResultData<BasePageResp<TenantFlow>> getBalanceFlowPage(PageReq req);

    ResultData<String> getMerchantAuth(User user);

    ResultData<MerchantHomeStatisticsVO> getHomeStatistics(HomeStatisticsReq req);

    BaseResp editShopAvatar(Shop req);

    BaseResp editShopNickname(Shop req);

    BaseResp editShopReturnAddress(Shop req);

    BaseResp editShopAfterSaleAddress(Shop req);

    BaseResp editShopAfterSalePhone(Shop req);

    BaseResp editSpuAndSku(SpuEditVO spuEditVO);

    ResultData<List<Freight>> getFreightList();

    ResultData<List<Category>> getAllCategoryList(Byte type);

    ResultData<List<Category>> getChildrenCategory(Long id);

    ResultData<List<Category>> getRootCategoryList(Byte type);

    ResultData<List<Unit>> getUnitList();

    ResultData<BasePageResp<SpuResp>> getSpuPage(SpuReq req);

    ResultData<SpuEditVO> getSpuEditDetail(Long id);

    BaseResp deleteProduct(Long id);

    BaseResp editSkuStock(EditSkuStockReq req);

    BaseResp editSingleSkuStock(Long skuId, Integer stock);

    BaseResp editSkuPrice(EditSkuPriceReq req);

    BaseResp editChangePrice(EditChangePriceReq req);

    BaseResp editSpuField(SpuFiledReq req);

    ResultData<BasePageResp<ShopAmountVO>> getShopAmountPage(ShopAmountReq req);

    ResultData<BasePageResp<OrderResp>> getAmountOrderPage(OrderPageReq req);

    ResultData<List<StatisticsVO>> getMonthAmountOrderList(OrderMonthStatisticsReq req);

    BaseResp editProductHidden(Long id);

    ResultData<String> getLogisticsTrace(User user, Long orderId);

    ResultData<OrderStatisticsVO> getOrderStatisticsByYear(Integer year);

    ResultData<SpuSellStatisticsVO> getSpuSellStatistics(SpuSellStatisticsReq req);

    ResultData<BasePageResp<Category>> getCategoryPage(CategoryReq req);

    ResultData<CategoryInfoResp> getCategoryInfo(Long id);

    ResultData<ShopStatisticsDataVO> getShopStatisticsData(TimeRangeReq req);

    ResultData<SpuTrendVO> getSpuClickTrend(TimeRangeReq req);

    ResultData<SpuTrendVO> getSpuVisitorTrend(TimeRangeReq req);

    ResultData<SpuTrendVO> getSpuRefundCountTrend(TimeRangeReq req);

    ResultData<SpuTrendVO> getSpuCompleteTrend(TimeRangeReq req);

    ResultData<SpuTrendVO> getSpuCustomerTrend(TimeRangeReq req);

    ResultData<ShopStatisticsDataVO> getSpuRateData(TimeRangeReq req);

    ResultData<BasePageResp<SpuSellDataVO>> getSpuSellDataPage(SpuSellDataReq req);

    BaseResp editOrderRemark(Orders orders);

    BaseResp editShopIntroduction(CompanyIntroduction req);

    BaseResp editAutoReplyFormat(String replyFormat);
}